package cn.bugstack.springframework.context;

import cn.bugstack.springframework.beans.BeansException;

/**
 * 该接口提供了对应用程序上下文的配置和管理能力，扩展自ApplicationContext接口。
 * 主要用于在应用程序启动阶段对上下文进行配置和自定义，以及在应用程序运行期间对上下文进行刷新和关闭等操作。
 */
public interface ConfigurableApplicationContext extends ApplicationContext {

    /**
     * 刷新应用程序上下文，重新加载配置并初始化所有单例Bean。该方法可用于在应用程序运行期间重新配置上下文。
     * @throws BeansException 如果在刷新过程中遇到Bean的配置问题。
     */
    void refresh() throws BeansException;

    /**
     * 注册一个JVM关闭钩子，以确保在应用程序正常关闭时能够优雅地关闭应用程序上下文。这包括清理资源和调用Bean的销毁方法等。
     */
    void registerShutdownHook();

    /**
     * 关闭应用程序上下文，释放所有资源和Bean实例。一旦调用此方法，上下文将不再可用。
     */
    void close();

}

